// let num:number = 10 ; 
// let str:string ='hello zf';
// let bool:boolean = true ; 



// let num1 :number =1 ; 
// let num2:Number =1 ;
// let num3 :number = Number(1)
// console.log(num3)
// let num4 :Number =new Number(1)

// const enum ROLE {
//     USER ,
//     ADMIN ,
//     MANAGER
// }
// console.log(ROLE.USER)

// class Animal {
//     private _name: string = 'Tom';

//     get name() { // 属性访问器 ---好处：可以通过这个访问私有属性，有点像代理 暴露方法访问属性
//         return this._name;
//     }
//     set name(name: string) {
//         this._name = name;
//     }
//     cc='a'
//     static b ='b'

// }
// let animal = new Animal();
// console.log(animal);


function addSay1(a:string){
    console.log(a) 
    return function(target:any){
        console.log(1)
    }
}
function addSay2(b:string){
    console.log(b)
    return function(target:any){
        console.log(2)
    }
}
function addSay3(c:string){
    console.log(c)
    return function(target:any){
        console.log(3)
    }
}
// 有参数的情况执行顺序 a -> b->c ->3 ->2->1 看编译后的源码得出来的结论

@addSay1('a1')
@addSay2('a2')
@addSay3('a3')
class PerSon {
   
}
let person = new PerSon()